widget: Refactor function
authorBenjamin Otte <otte@redhat.com>
Mon, 28 Sep 2015 19:57:25 +0000 (21:57 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 28 Oct 2015 18:44:28 +0000 (19:44 +0100)
Turn it from a loop into tail-calling itself.

gtk/gtkwidget.c

index 88ff6ed29fc23a51c9d21622ca9ccec0044d5bad..029fa63684306123e0eb390be0ceb7228a5a6e1a 100644 (file)
@@ -5607,42 +5607,38 @@ gtk_widget_queue_allocate (GtkWidget *widget)
 void
 gtk_widget_queue_resize_internal (GtkWidget *widget)
 {
-  GtkWidget *parent;
   GSList *groups, *l, *widgets;
 
-  parent = widget;
+  if (gtk_widget_get_resize_needed (widget))
+    return;
 
-  do
-    {
-      if (gtk_widget_get_resize_needed (parent))
-        return;
+  gtk_widget_queue_resize_on_widget (widget);
 
-      gtk_widget_queue_resize_on_widget (parent);
+  groups = _gtk_widget_get_sizegroups (widget);
 
-      groups = _gtk_widget_get_sizegroups (parent);
+  for (l = groups; l; l = l->next)
+  {
+    if (gtk_size_group_get_ignore_hidden (l->data) && !gtk_widget_is_visible (widget))
+      continue;
 
-      for (l = groups; l; l = l->next)
+    for (widgets = gtk_size_group_get_widgets (l->data); widgets; widgets = widgets->next)
       {
-        if (gtk_size_group_get_ignore_hidden (l->data) && !gtk_widget_is_visible (widget))
-          continue;
-
-        for (widgets = gtk_size_group_get_widgets (l->data); widgets; widgets = widgets->next)
-          {
-            gtk_widget_queue_resize_internal (widgets->data);
-          }
+        gtk_widget_queue_resize_internal (widgets->data);
       }
+  }
 
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      if (GTK_IS_RESIZE_CONTAINER (parent))
-        {
-          gtk_container_queue_resize_handler (GTK_CONTAINER (parent));
-          break;
-        }
+  if (GTK_IS_RESIZE_CONTAINER (widget))
+    {
+      gtk_container_queue_resize_handler (GTK_CONTAINER (widget));
 G_GNUC_END_IGNORE_DEPRECATIONS;
-
-      parent = _gtk_widget_get_parent (parent);
     }
-  while (parent);
+  else
+    {
+      GtkWidget *parent = _gtk_widget_get_parent (widget);
+      if (parent)
+        gtk_widget_queue_resize_internal (parent);
+    }
 }
 
 /**